﻿// owner 蒋家伟

#pragma once

// jsdk
#include "HardwareBase_home.h"
#include "IDeviceExternalData.h"

namespace jsdk
{
    class ISerialPortEventHandler;
    class IHardwareEventHandler;

    // 类别描述 ：带有串口通信的硬件设备的外部数据
    // 实现细节 : 主要内部存储一个串口通信与硬件设备的事件监听对象handler
    // 业务逻辑 : 所有的逻辑请在handler里面实现，如果当前设备要求其他设备工作，请创建Task，详情参见ITaskManager。
    // 注册逻辑 ：请使用IDeviceRegisterHelp的 DEVICE_REGISTER 宏注册，把宏放到了cpp文件的空白地方即可，在全局变量初始化的时候注册进去。
    class HARDWAREBASE_EXPORT ISerialPortHardwareExternalData : public IDeviceExternalData
    {
    public:
        virtual ~ISerialPortHardwareExternalData() {}

        /// \ 获取 <设备名称>
        virtual const std::wstring getHardwareName() const = 0;

        /// \ 获取 <SerialPort> 事件的监听者
        virtual ISerialPortEventHandler* getSerialPortEventHandler() const = 0;

        /// \ 获取 <硬件> 事件的监听者
        virtual IHardwareEventHandler* getHardwareEventHandler() const = 0;

        /// \ 获取 <SerialPort> 参数
        /// \ out portName 串口名称
        /// \ out baudRate 波特率
        /// \ out dataBits 数据位数
        /// \ out stopBits 停止位
        /// \ out parity 校验位
        /// \ out flowControl 流控制
        /// \ return bool 表示获取成功，数据有效，否则参数无效
        virtual bool getSerialPortParameter(
            std::string& portName,
            int& baudRate,
            short& dataBits,
            short& stopBits,
            short& parity,
            short& flowControl
            ) const = 0;
    };
}